// 导入 axios 模块
import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
// 创建 axios 实例（可以创建多个 axios 实例，配置不同的基地址，并导出）
const service = axios.create({
  // 请求的基地址
  // baseURL: 'http://ihrm.itheima.net/api',
  // baseURL: 'http://localhost:5678',
  baseURL: process.env.VUE_APP_BASE_API,
  // 请求的超时时间
  timeout: 5000
})

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    const { token } = store.state.user
    if (token) {
      // 如果有token,通过请求头携带给后台
      config.headers.Authorization = `Bearer ${token}`
    }
    // config是记录了所有请求信息的一个对象
    return config
  },
  (err) => Promise.reject(err)
)

// 响应拦截器
service.interceptors.response.use(
  (resp) => {
    const { data } = resp
    // 判断 data.success
    if (data.success) {
      // 直接返回data数据
      return data
    }
    // 请求失败，返回一个失败状态的Promise实例
    return Promise.reject(data)
  },
  async(err) => {
    if (err.response.status === 401 && err.response.data.code === 10002) {
      Message.error('token 过期啦！')
      await store.dispatch('user/logoutAction')
      // $route.path -> /user 不带参数，只有路径
      // $route.fullPath -> /user?id=110 携带参数
      this.replace(`/login?redirect=${this.$route.fullPath}`)
      // 给出token过期的提示
      // 跳转至登录，并携带回跳地址
    }
    Promise.reject(err)
  }
)

// 导出请求实例
export default service
